from pydantic import BaseModel, Field
from typing import Optional, List


class DraftAddTextRequest(BaseModel):
    """添加文本请求模型 """
    # 基本参数
    text: str = Field(..., description="文本内容")
    start: float = Field(0, description="起始时间（秒）")
    end: float = Field(5, description="结束时间（秒）")
    draft_id: Optional[str] = Field(None, description="草稿ID")

    # 位置参数
    transform_y: Optional[float] = Field(-0.8, description="垂直移动参数，相对值，1表示屏幕最上边，-1表示屏幕最下边，0表示居中")
    transform_x: Optional[float] = Field(0, description="水平移动参数，相对值，1表示屏幕最右边，-1表示屏幕最左边，0表示居中")

    # 字体样式参数
    font: Optional[str] = Field(None, description="字体")
    font_color: Optional[str] = Field("#ffffff", description="字体颜色")
    font_size: Optional[float] = Field(8.0, description="字体大小")
    track_name: Optional[str] = Field("text_main", description="轨道名")
    vertical: Optional[bool] = Field(False, description="是否垂直显示")
    font_alpha: Optional[float] = Field(1.0, description="字体透明度")

    # 边框参数
    border_alpha: Optional[float] = Field(1.0, description="边框透明度")
    border_color: Optional[str] = Field("#000000", description="边框颜色")
    border_width: Optional[float] = Field(0.0, description="边框宽度")

    # 背景参数
    background_color: Optional[str] = Field("#000000", description="背景颜色")
    background_style: Optional[int] = Field(1, description="背景样式")
    background_alpha: Optional[float] = Field(0.0, description="背景透明度")
    background_round_radius: Optional[float] = Field(0.0, description="背景圆角")
    background_height: Optional[float] = Field(0.14, description="背景高度占比，范围0.0-1.0")
    background_width: Optional[float] = Field(0.14, description="背景宽度占比，范围0.0-1.0")
    background_horizontal_offset: Optional[float] = Field(0.5, description="背景水平偏移，范围0.0-1.0")
    background_vertical_offset: Optional[float] = Field(0.5, description="背景垂直偏移，范围0.0-1.0")

    # 阴影参数
    shadow_enabled: Optional[bool] = Field(False, description="是否启用阴影")
    shadow_alpha: Optional[float] = Field(0.9, description="阴影透明度，范围0.0-1.0")
    shadow_angle: Optional[float] = Field(-45.0, description="阴影角度，范围-180.0-180.0")
    shadow_color: Optional[str] = Field("#000000", description="阴影颜色")
    shadow_distance: Optional[float] = Field(5.0, description="阴影距离")
    shadow_smoothing: Optional[float] = Field(0.15, description="阴影平滑度，范围0.0-1.0")

    # 气泡效果参数
    bubble_effect_id: Optional[str] = Field(None, description="气泡效果ID")
    bubble_resource_id: Optional[str] = Field(None, description="气泡资源ID")

    # 文本效果参数
    effect_effect_id: Optional[str] = Field(None, description="花字效果ID")
    intro_animation: Optional[str] = Field(None, description="入场动画")
    intro_duration: Optional[float] = Field(0.5, description="入场动画持续时间")
    outro_animation: Optional[str] = Field(None, description="出场动画")
    outro_duration: Optional[float] = Field(0.5, description="出场动画持续时间")

    # 画布参数
    width: Optional[int] = Field(1080, description="画布宽度")
    height: Optional[int] = Field(1920, description="画布高度")
    fixed_width: Optional[float] = Field(-1, description="文本固定宽度比例，默认-1表示不固定")
    fixed_height: Optional[float] = Field(-1, description="文本固定高度比例，默认-1表示不固定")

    # 多样式文本参数
    text_styles: Optional[List] = Field([], description="文本的不同部分的样式列表")

    letter_spacing: Optional[int] = Field(0, description="字符间距")
    line_spacing: Optional[int] = Field(0, description="行间距")



class DraftAddSubtitleRequest(BaseModel):
    """添加字幕请求模型"""
    # 核心参数
    srt: str = Field(..., description="字幕内容或SRT文件URL（必填，支持直接传字幕文本或文件路径/URL）")
    draft_id: Optional[str] = Field(None, description="草稿ID（选填，用于指定要添加字幕的草稿）")
    track_name: Optional[str] = Field("subtitle", description="轨道名")
    time_offset: Optional[float] = Field(0.0, description="字幕时间偏移量（秒，选填，默认0.0，可整体调整字幕显示时间）")

    # 字体样式参数
    font: Optional[str] = Field("挥墨体", description="字体")
    font_size: Optional[float] = Field(5.0, description="字体大小（选填，默认5.0）")
    bold: Optional[bool] = Field(False, description="是否加粗（选填，默认false）")
    italic: Optional[bool] = Field(False, description="是否斜体（选填，默认false）")
    underline: Optional[bool] = Field(False, description="是否下划线（选填，默认false）")
    font_color: Optional[str] = Field("#FFFFFF", description="字体颜色（选填，默认白色#FFFFFF，支持十六进制色值）")
    vertical: Optional[bool] = Field(False, description="是否垂直显示（选填，默认false）")
    alpha: Optional[float] = Field(0.0, description="背景透明度（选填，默认0.0）")

    # 边框参数
    border_alpha: Optional[float] = Field(1.0, description="边框透明度（选填，默认1.0）")
    border_color: Optional[str] = Field("#000000", description="边框颜色（选填，默认黑色#000000）")
    border_width: Optional[float] = Field(0.0, description="边框宽度（选填，默认0.0）")

    # 背景参数
    background_color: Optional[str] = Field("#000000", description="背景颜色（选填，默认黑色#000000）")
    background_style: Optional[int] = Field(0,
                                            description="背景样式（选填，默认0，需与业务支持的样式枚举匹配，如0为无背景、1为矩形背景等）")
    background_alpha: Optional[float] = Field(0.0, description="背景透明度（选填，默认0.0）")

    # 图像调整参数
    transform_x: Optional[float] = Field(0.0, description="X轴位置偏移（选填，默认0.0）")
    transform_y: Optional[float] = Field(-8.0, description="Y轴位置偏移（选填，默认-0.8）")
    scale_x: Optional[float] = Field(1.0, description="X轴缩放比例（选填，默认1.0）")
    scale_y: Optional[float] = Field(1.0, description="Y轴缩放比例（选填，默认1.0）")
    rotation: Optional[float] = Field(0.0, description="旋转角度（选填，默认0.0，单位为度）")

    # 画布参数
    width: Optional[int] = Field(1080, description="画布宽度（选填，默认1080）")
    height: Optional[int] = Field(1920, description="画布高度（选填，默认1920）")